Recent rapid advances in the development of data processors and software implementations are making more and more data processing services available to users. Basic services, such as the processing and manipulation of data in response to instructions and commands and the managing of data including storing such data in records and files, modifying the stored data and reading the stored data are now within economic reach of both small and large users. Typically, the processing is provided by one or more digital computers cooperating with externally connected user devices, such as data terminals, which may provide the data to be manipulated, managed or transferred or the commands and instructions for the data.
Some "users" of data processing services may find it preferable to process data in their own, on-premises, host computer. A single such "user" may have widely geographically separate "subsidiary" locations (such as "outlets" for a manufacturer) and thus have need for processing services at these various locations. One solution is to send all raw data through the common carrier network to the "user" host and return processed data, as needed, to terminals at the "outlet locations". Another solution is to provide distributed processing services at or near the various terminal locations to reduce the carrier network communications between each terminal and the host computer. More specifically, in accordance with the latter solution, it is advantageous to provide local services such as editing of "text", interpretation of commands, creation of forms, accumulation and manipulation of numerical and text data and the like, at locations adjacent or near to the several terminals. The carrier network communication between the host and the terminals is then limited to data after such accumulation, manipulation and editing at the various locations. It has been suggested that the provision of such distributed processing services can be appropriately handled by a service vendor for a plurality user "customers", reducing the cost for each "customer" by time-sharing the usage of processing equipment among such plurality of "customers".
Since each customer has unique and differing processing needs, individualized programs, specially tailored for these needs, must be available for the several customers. It is therefore clear that each distributed processing location (or node) for the above-described service necessarily must accommodate a large number of programs (for a plurality of customers) and each node might preferably comprise a plurality of processors or CPUs, each processor supporting a plurality of programs. As is well known in the art, only one program can actually be "executing" at any given time in a computer. However, if the program currently running should terminate, time-out, or go into a "wait" state pending the occurrence of some "event", such as the completion of any input/output operation, another program is immediately available to begin executing, thus permitting different customer programs the opportunity to time-share computer time.
In discussing the execution of a program, it is important to understand the concept of "processing". A process is the total environment in which a program (or image) executes and has, in addition to the image, three further components, namely: (1) memory space allocated to the process for storing the image, for storing data generated and used by the image and for storing control information; (2) a software context which includes such pieces of information such as priorities and privileges allocated to the process, a unique process identifier, accounting information and so on; and (3) a hardware context which comprises the contents at any instant of time of the general purpose registers within the processor or CPU. Whenever execution of the process is suspended, its hardware context is stored in memory before another process begins execution. When a process is again allowed to execute, its hardware context is restored in the registers so that the process can resume execution at the point it was interrupted without again processing previously manipulated data or reexecuting commands or instructions.
As previously noted, each customer of a service vendor typically has needs and requirements that differ from, in part, and are similar to, in part, the needs and requirements of other customers. To satisfy these diverse customers, it is advantageous for the service vendor to create an individual process to execute each "customized" program developed for the unique needs of each customer and create other processes to execute programs having "universal capabilities" which satisfy common needs of a plurality of customers. A broad object of this invention is to provide an integrated distributed-processing system having both "customized" and "universal" processes.
A communication subsystem for transferring data between the several processes is a critical element in an integrated distributed-processing system suitable for diverse time-sharing customers or users. An important attribute in such a communication subsystem is to identify and select process-to-process connections in response to a request from an originating process to call a terminating end-point process. In addition, when calling via another system (such as the common carrier network), the subsystem should provide system-wide communication criteria or parameters, such as a maximum rate of data flow and a minimum grade of service. It is advantageous to offer users or customers "customized" processes that have at least partial control over the communication parameters, such as setting the data flow below the communication subsystem maximum rate of flow or setting a grade of service above the communication subsystem minimum grade of service, for example. It is therefore a further object of this invention to provide a communication subsystem for a distributed, time-shared, processing system which accommodates the diverse needs and requirements of the various processes.